package com.haiyou.common.thread.policy;

import java.util.concurrent.ThreadPoolExecutor;

import lombok.extern.slf4j.Slf4j;

/**
 * 线程池 拒绝策略
 * 
 * <pre>
 * 1、AbortPolicy策略：该策略会直接抛出异常，阻止系统正常工作；
 * 
 * <pre>
 * 2、CallerRunsPolicy策略：如果线程池的线程数量达到上限，该策略会把任务队列中的任务放在调用者线程当中运行；
 * 
 * <pre>
 * 3、DiscardOledestPolicy策略：该策略会丢弃任务队列中最老的一个任务，也就是当前任务队列中最先被添加进去的，马上要被执行的那个任务，并尝试再次提交；
 * 
 * <pre>
 * 4、DiscardPolicy策略：该策略会默默丢弃无法处理的任务，不予任何处理。当然使用此策略，业务场景中需允许任务的丢失；
 * 
 * <pre>
 * 
 */
@Slf4j
public class DefaultRejectedPolicy extends ThreadPoolExecutor.CallerRunsPolicy {

	public static final DefaultRejectedPolicy instance = new DefaultRejectedPolicy();

	private DefaultRejectedPolicy() {
		super();
	}

	@Override
	public void rejectedExecution(Runnable r, ThreadPoolExecutor e) {
		super.rejectedExecution(r, e);
		log.warn("[{}] rejected [{}]! run in current Thread!", e, r);
	}
}
